#include<functional>
class Task
{
public:
    Task(){};
    typedef std::function<std::string(int,int,char)> func_t;
    Task(int x , int y , char op ,func_t func)
    :_x(x),_y(y),_op(op),_func(func)
    {}

    std::string operator()()
    {
        return _func(_x,_y,_op);
    }

    std::string tostring() //将我们的任务转换为字符串，方便提示
    {
        char buffer[64];
        snprintf(buffer,sizeof buffer ,"%d %c %d = ? ",_x,_op,_y);
        return buffer; 
    }

private:
    int _x;
    int _y;
    char _op;
    func_t _func;
};

std::string mymath(int x ,int y ,char op)  //数学计算的任务
{
    int result = -1;
    switch(op)
    {
        case '+':
        {
            result=x+y;
            break;
        }
        case '-':
        {
            result=x-y;
            break;
        }
        case '*':
        {
            result=x*y;
            break;
        }
        case '/':
        {
            if(y==0)
            {
                return "除0错误";
            }
            result=x/y;
            break;
        }
        case '%':
        {
            if(y==0)
            {
                return "模0错误";
            }
            result=x%y;
            break;
        }
    }
    char buffer[64];
    snprintf(buffer,sizeof buffer,"%d %c %d = %d",x,op,y,result);
    return buffer;
}

// class storeTask
// {
// public:
// typedef std::function<void(std::string)> func_t;
//     storeTask(){};
//     storeTask(std::string str,func_t func)
//     :_context(str),_func(func)
//     {}

//     void operator()()
//     {
//         _func(_context);
//     }


// private:
//     std::string _context;
//     func_t _func;
// };

// void store_func(std::string str)
// {
//     const char* name ="log.txt";
//     int fd = open(name,O_WRONLY|O_CREAT|O_APPEND,0777);
//     write(fd,str.c_str(),str.size());
//     close(fd);
// }


